package classi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
import java.util.Timer;

import interfacce.RisolutoreEsame;

public class RisolutoreEsameImpl extends UnicastRemoteObject implements RisolutoreEsame {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 7005310181222156671L;
	private Timer timerRisposta=null; 
	private String nomeEsame = null;
	private Traccia traccia=null;
	private int[] risposte=null;
	private Integer punteggio=null;
	private Studente rifStudente=null;
	private int domandaCorrente ;
		
	

	public RisolutoreEsameImpl(String nomeEsame,Traccia t,Studente s) throws RemoteException {
		super();
		this.nomeEsame = nomeEsame;
		this.traccia = t;
		this.rifStudente = s;
		this.punteggio = 0;
		this.timerRisposta = new Timer();
		this.risposte = new int[10];
		domandaCorrente = 0;
		
 	}
	

	@Override
	public Domanda proponiDomanda(int numero) throws RemoteException {
		return traccia.getListaDomande()[numero];
	}

	@Override
	public void rispondiDomanda(int domanda , int risposta) throws RemoteException {
		risposte[domanda] = risposta;
		System.out.println("[RISOLUTORE ESAME]Alla domanda " + domanda + "hai risposto:" + risposta);
		
	}

	@Override
	public Domanda passaAllaProssima() throws RemoteException {
		if(domandaCorrente!=9){
			domandaCorrente++;
			return proponiDomanda(domandaCorrente);
		}
		return null;
		
	}

	@Override
	public boolean verificaEsame() throws RemoteException {
		for (int i = 0; i< traccia.getListaDomande().length; i++){
			if(risposte[i]==0){   //se la risposta non è fornita -1 
				punteggio -= 1; 
			}
			else {
				if(risposte[i] == traccia.getListaDomande()[i].getRispCorretta()){ //se la risposta  è corretta +3
					punteggio += 3;
					}//if interno
				else
					punteggio += 0;
				
			}//else
		}//for
		if(punteggio >= 15){ //se lo studente 
			System.out.println("[RISOLUTORE ESAME]Lo studente ha superato l'esame con il punteggio di " + punteggio);
			Date questoIstante = java.util.GregorianCalendar.getInstance().getTime();
			EsameSostenuto es = new EsameSostenuto(nomeEsame, questoIstante, punteggio);
			rifStudente.aggiungiEsameInCarriera(es);
			System.out.println("[RISOLUTORE ESAME]Esame aggiunto in carriera");
			return true;
		}
		else{
			System.out.println("[RISOLUTORE ESAME]Lo studente è stato bocciato con il punteggio di " + punteggio);
			return false;
		}
	}



	
	
	
	

}
